import io
import sys
from bs4 import BeautifulSoup
import requests
import json

#伪装浏览器请求
headers={
    'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
    'Referer':'https://www.taopiaopiao.com/showList.htm?spm=a1z21.3046609.header.4.1d69112aGq86y0&n_s=new'
}

#获取网页信息
def getPage(url):
    try:
        response=requests.get(url)
        if response.status_code==200:   #http状态码，200表示请求成功
            return response.text
        else:
            return None
    except Exception:
        return None
#解析html标签内容
def getInfo(html):
    soup=BeautifulSoup(html,'html.parser')    #创建bs对象 解析器为html.parser
    items=soup.select('div .movie-card-wrap')            #查询所有的电影卡片里的信息
    i=1
    result = []  #创建一个空的数组
    for item in items:
        name=item.find(name='div',class_='movie-card-name').get_text().strip() #这个是找你要爬取内容的标签和它的类
        if '\n' in name:
            name = name[:name.index('\n')] #若包含评分，则去掉评分，因为有些电影没有评分
        obj={}
        obj['movie_name'] = name
        poster = item.find(name='img').get("src")   #获取海报图片地址
        obj['poster'] = poster  
        info=item.find(name='div',class_='movie-card-list').get_text().strip()  #这里包含 主演 类型 时长等信息
        infoArr = info.split('\n')
        for index in range(len(infoArr)):
            obj[index] = infoArr[index]
        #获取的包括正在热映以及即将上映
        soon = item.find(name='a',class_='movie-card-soon')
        if(soon==None): #正在热映
            obj["bool_showed"] = True
        else: #即将上映
            obj["bool_showed"] = False
        result.append(obj)  #向集合中添加元素
        i=i+1
    return result
sys.stdout = io.TextIOWrapper(sys.stdout.detach(),encoding='utf-8')
url='https://www.taopiaopiao.com/showList.htm?spm=a1z21.3046609.header.4.1d69112aGq86y0&n_s=new'
html=getPage(url)
data=getInfo(html)
print(json.dumps(data,ensure_ascii=False))  #转成json
